
/**
 * data-table js
 *
 * @author johnny
 * @date 2018/11/28
 */
/**
 * 通过封装好的数据，自己执行ajax请求
 *
 * @param data dataTable原生数据
 * @param callback 回调
 * @param tableField 表格对应的数据库表字段
 *           tableField 参考readme说明（重要）
 * @param url 访问地址
 * @param paramter 除原生参数之外，自己需要的参数
 * @return String 页面地址
 * @throws Exception 异常
 * @create on 2018/11/25 by johnny
 */

function ajax(data,callback,tableField,url,paramter) {
    //获取封装数据
    var page = getPageData(data,tableField);
    $.ajax({
        type:"POST",
        url:url,
        cache : false,	//禁用缓存
        data: $.extend({},paramter,page),	//传入已封装的参数
        dataType: "json",
        success: function (data) {
            if(data["success"]==true) {
                callback(data);
            }else{
                //弹提示框
                alert("失败");
                callback(null);
            }

        }
    });
}

//连接好的模糊查询字段，格式 concat(column1,column1..)
var concatTableField ="";
/**
 * 当点击分页，排序，搜索时，封装发出的请求
 *
 * @param data 原始请求（dateTable默认）数据
 * @param tableField 表字段，需要与表字段对应（忽略驼峰命名）
 * @return String 页面地址
 * @create on 2018/11/25 by johnny
 */
function getPageData(data,tableField) {
    var page={};
    if (data.order&&data.order.length&&data.order[0]){

        var column = data.order[0].column;
        var json = tableField;
        page.draw = data.draw;
        //搜索列
        if(json!=null&&json.length>0 ){
            for(var i=0;i<json.length;i++){
                for(var key in json[i]){
                    if(key =='column'+column ){
                        page.sortField = json[i][key];
                        break;
                    }
                }
            }
        }
        //page.sortField = json[column].data;
        page.orderDir = data.order[0].dir;
        page.start = data.start;
        page.length = data.length;
        page.searchValue = data.search['value'];
        //如果concatTableField为空则执行getAllFieldValue,避免调用getPageData都要执行getAllFieldValue
        if(concatTableField == ""){
            getConcatFieldValue(tableField);
        }
        page.concatTableField =  concatTableField;
    }
    return page;
}

/**
 * 连接模糊查询字段，格式 concat(column1,column1..)
 *
 * @param tableField 表字段，需要与表字段对应（忽略驼峰命名）
 * @return String 页面地址
 * @create on 2018/11/25 by johnny
 */
function getConcatFieldValue(tableField) {
    //js也是类似java的引用传递，所以序列化后反序列化，达到克隆的目的
    var tableField=JSON.parse(JSON.stringify(tableField));
    //过滤掉操作行
    // for(var i=0;i<tableField.length;i++){
    //
    //     if(tableField[i].data==null || tableField[i].data=='undefined'){
    //
    //         //delete tableField[i];
    //         tableField.splice(i, 1);
    //         i--;//splice会直接从json数组中删除，遇到两个操作列会跳过第二个
    //     }
    // }
    if(tableField==null|| tableField.length==0 ){
        return;
    }
    if(tableField.length==1){
        for(var key in tableField[0]){
            concatTableField = tableField[0][key] ;
        }
        return;
    }
    for(var i=0;i<tableField.length;i++){
        for(var key in tableField[i]){
            if(i == 0){
                concatTableField += "concat("+tableField[i][key];
            }else if(i == tableField.length-1){
                concatTableField += ","+tableField[i][key]+")";
            }else {
                concatTableField += ","+tableField[i][key];
            }
        }
    }
    return;
}


/*常量*/

var CONSTANT = {
    DATA_TABLES : {
        DEFAULT_OPTION : { //DataTables初始化选项
            language: {
                "sProcessing":   "处理中...",
                "sLengthMenu":   "每页 _MENU_ 项",
                "sZeroRecords":  "没有匹配结果",
                "sInfo":         "当前显示第 _START_ 至 _END_ 项，共 _TOTAL_ 项。",
                "sInfoEmpty":    "当前显示第 0 至 0 项，共 0 项",
                "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
                "sInfoPostFix":  "",
                "sSearch":       "搜索:",
                "sUrl":          "",
                "sEmptyTable":     "表中数据为空",
                "sLoadingRecords": "载入中...",
                "sInfoThousands":  ",",
                "oPaginate": {
                    "sFirst":    "首页",
                    "sPrevious": "上页",
                    "sNext":     "下页",
                    "sLast":     "末页",
                    "sJump":     "跳转"
                },
                "oAria": {
                    "sSortAscending":  ": 以升序排列此列",
                    "sSortDescending": ": 以降序排列此列"
                }
            },
            order:[[ 1, "asc" ]],			//取消默认排序查询,否则复选框一列会出现小箭头
            processing: true,
            serverSide: true
        }
    }
};

//全选按钮事件
//对于元素的固有属性，建议使用prop
$('#check-all').on('click',function(){
    if(this.checked) {
        $("table input[type = 'checkbox' ]").prop('checked',true);
    }else {
        $("table input[type = 'checkbox' ]").prop('checked',false);
    }
});

//获取表格内所有选中行的值
function getAllCheckedRowValue(){
    var jsonArray =new Array();
    $("table input:checkbox:checked").each(function () {
        //获取距离某元素最近的行的json
        var json = table.row($(this).closest('tr')).data();
        jsonArray.push(json);
    });
    return jsonArray;
}

//获取某行的值
function getClickedRowValue(button) {
    return table.row($(button).closest('tr')).data();
}
/**
 * 刷新表格数据
 *
 * @create on 2018/11/30 by johnny
 */
function reloadDataTable() {
    table.ajax.reload( null, false );//保留分页刷新表格数据，（时好时坏。。）
}
/**
 * 操作成功
 *
 * @param msg 返回信息
 * @create on 2018/12/27 by johnny
 */
function operateSuccess(msg) {
    //弹提示框
    prompt_alert('success',msg,0);
    //刷新表格数据
    reloadDataTable();
}

/**
 * 失败
 *
 * @param msg 返回信息
 * @create on 2018/12/27 by johnny
 */
function operateError(msg) {
    //弹提示框
    prompt_alert('error',msg,0);
}

